/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package BD;

import Schema.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import BD.*;
import java.util.logging.Level;
import java.util.logging.Logger;


/**
 *
 * @author qiaob
 */
public class BDGestion extends BDCommun{
    
    
    
    /**
     * Inserer une nouvelle format dans le BD
     *   @param f  l'object format on veut inserer dans BD
     *   @exception  si le format est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
    public void NouveauFormat(Format f){
        try {
            this.ReadCommitted();
            //Parametrer une requete
                PreparedStatement stmt = conn.prepareStatement("insert into Format(Libelle,PrixUnit,ResMin, vitesse, stock) values (?,?,?,?,?)");
                stmt.setString(1,f.getLibelle());
                stmt.setDouble(2,f.getPrixUnite());
                stmt.setInt(3,f.getResMin());
                stmt.setDouble(4,f.getVitesse());
                stmt.setInt(5,f.getStock());
                
            //Execution de requete
                ResultSet rest = stmt.executeQuery();
                this.valider();
        } catch (SQLException ex) {
            Logger.getLogger(BDGestion.class.getName()).log(Level.SEVERE, null, ex);
            this.annuler();
        }
    }
    
    /**
     * Inserer une nouvelle code promo dans le BD
     *   @param c  l'object commande  on va evaluer concernant a un client
     *   @exception  si le format est deja existant dans le BD, ou bien des erreur generer pendant l'insertion
     *   @return  sans retourne valeur     
     */
       public void CreationCodePromo(Commande c){
            if(c.getPrixTotal() >= 100){
            try {
                double reduc=0.05*c.getPrixTotal();
                PreparedStatement stmt=conn.prepareStatement("insert into CodePromo (IdCli, Reduction) values (?, ?)");
                stmt.setInt(1, c.getIdCli());
                stmt.setDouble(2, reduc);
                ResultSet resultat= stmt.executeQuery();
                resultat.close();
            } catch (SQLException ex) {
                annuler();
                Logger.getLogger(BDClient.class.getName()).log(Level.SEVERE, null, ex);
            }
          }
          valider();
        }
    /**
     * Valider une livraison 
     * @param  l  l'instance de livraison qu'on veut valider
     * @exception  exception genere pendant la mise a jour de la table Livraison
     * @return String  si c'est pas reussi  message retour, sinon null
     */
    
public void ValiderLivraison(Livraison l) {
        Serializable();
        try {
            if(!(l.getStatutLiv().equals("en cours"))){
              System.out.println("Vous ne pouvez pas valider cette livraison car elle est actuellement dans l'etat: "+l.getStatutLiv());
              annuler();
            }
            PreparedStatement stmt1=conn.prepareStatement("update Livraison set statutLiv=? where IdLivraison=?");
            stmt1.setString(1, l.getStatutLiv());
            stmt1.setInt(2, l.getIdLivraison());
            stmt1.executeUpdate();
            stmt1.close();
            System.out.println("La livraison "+l.getIdLivraison()+" est envoyée");
        } catch (SQLException ex) {
            Logger.getLogger(BDGestion.class.getName()).log(Level.SEVERE, null, ex);
            annuler();
        }
        valider();

}
    
  
public void SuppressionFichierJuridique(Fichier f) throws SQLException{
      PreparedStatement stmt=conn.prepareStatement("select c.IdCommande from Commande c, Article art, Photo p, Fichier fich where c.IdCommande=art.IdCommande and art.IdAlbum=p.IdAlbum and p.FId=fich.FId and fich.Fid=? and c.statusCom=?");
      stmt.setInt(1, f.getFid());
      stmt.setString(2, "en cours");
      ResultSet resultat= stmt.executeQuery();
      while(resultat.next()) {
	//Pour créer un obljet Commande qui est demander pour la SuppressionCommande
	PreparedStatement stmt1=conn.prepareStatement("select * from commande where IdCommande=?");
	stmt1.setInt(1, resultat.getInt("c.IdCommande"));
	ResultSet resultat2= stmt.executeQuery();
	//Creation de l'objet commande
	Commande c=new Commande(resultat2.getInt("IdCommande"),resultat2.getInt("IdCli"),resultat2.getDate("DateCom"),resultat2.getDouble("PrixTotal"),resultat2.getString("statutCom"));
	SuppressionCommande(c);
        System.out.println("La commande "+resultat2.getString("IdCommande")+" a ete supprimee");
    }
    /*if (!suppressionFichier(f)){
        this.annuler();
      return" Le fichier que vous souhaitez supprimer n'existe pas";
    }
    else
    {
       this.valider();
      return null;
    }   */ 

    
}

public void SupprimerClient(Client c) {
     this.Serializable();   
     try {
            PreparedStatement stmt=conn.prepareStatement("select * from Fichier where IdCli=?");
            stmt.setInt(1, c.getIdCli());
            ResultSet resultat= stmt.executeQuery();
            while(resultat.next()) {
              //Pour créer un obljet Fichier qui est demander pour ModifierPartageFichier
              Fichier f=new Fichier(resultat.getInt("FId"),resultat.getString("Chemin"),resultat.getInt("IdCli"),resultat.getString("InfoPriseVue"),resultat.getInt("Resolution"),resultat.getString("partage"));
              modifierPartageFichier(f,"N");
            }            
            PreparedStatement stmt1=conn.prepareStatement("update Client set Pass=? where IdCli=?");
            stmt1.setString(1, "NULL");
            stmt1.setInt(2, c.getIdCli());
            stmt1.executeUpdate();
            stmt1.close();            
        } catch (SQLException ex) {
            annuler();
            Logger.getLogger(BDGestion.class.getName()).log(Level.SEVERE, null, ex);
        }
        valider();
        System.out.println("Le client "+c.getNom()+" "+c.getPrenom()+" a été supprimé");
}
      
public void AjoutStock(Format f, int s) {
        this.Serializable();
        try {
            if(s<0){
              System.out.println("Le stock que vous ajoutez doit être positif");
              annuler();
            }
            
            PreparedStatement stmt1=conn.prepareStatement("update Format set stock=? where IdFormat=?");
            int st=f.getStock()+s;
            stmt1.setInt(1, st);
            stmt1.setInt(2, f.getIdFormat());
            stmt1.executeUpdate();
            stmt1.close();
            System.out.println("Le format"+ f.getLibelle()+" possede maintenant un stock de: "+st);
        } catch (SQLException ex) {
            annuler();
            Logger.getLogger(BDGestion.class.getName()).log(Level.SEVERE, null, ex);
            
        }
        valider();
}


    
    
}